/*************************************************************************
                         flow  -  interface
                             -------------------
    debut                : 10 oct. 2009
    copyright            : (C) 2009 par Binome 3310
*************************************************************************/

//------ Interface de la classe <flow> (fichier flow.h) ------

#ifndef flow_H_
#define flow_H_

//--------------------------------------------------- Interfaces utilisées
#include <fstream>
#include <string>
using namespace std;

//------------------------------------------------------------- Constantes

typedef enum codeRetourFlow{FLOWOK, EOSTREAM, EMPTY_LINE} codeRetourFlow;
// OK :
// EOSTREAM :

//------------------------------------------------------------------ Types

//------------------------------------------- Rôle de la classe Collection

class flow
{

//----------------------------------------------------------------- PUBLIC

	public:

//----------------------------------------------------- Methodes publiques

	void CurrentLine();
	// Mode d'emploi : Récupere la ligne courante du flux
	//
	// Contrat :
	//

	codeRetourFlow CurrentWord(string &word);
	// Mode d'emploi: récupere l'identifiant courant dans la ligne Line
	//
	// Contrat :
	//

	int GetLine();
	//Renvoie le numéro de la ligne courante dans le flux

//-------------------------------------------------- Surcharge d'opérateur

//-------------------------------------------- Constructeurs - destructeur
	flow(char* path, string delimit);
	// Mode d'emploi :
	//
	// Contrat :
	//

	virtual ~flow();
	// Mode d'emploi :
	//
	// Contrat :
	//

//------------------------------------------------------------------ PRIVE

	protected:

//----------------------------------------------------- Méthodes protégées

//----------------------------------------------------- Attributs protégés

	ifstream stream;

	string delimiters;

	string currentLine;

	int currentLineNumber;

	int correction;
	//Corrige quelques effets de bords

	int currentPosition;

	int length;
	//Longueur de la ligne currentLine

	bool EOS;
};

//------------ Autres définitions dépendantes de <flow> ------------------

#endif /* flow_H_ */
